package com.zjl.学习.第06章_块步骤_读操作写.A_ItemReader块读;

import com.zjl.springbatch.util.OutColour;
import com.zjl.学习.第06章_块步骤_读操作写.User;
import org.springframework.batch.core.ChunkListener;
import org.springframework.batch.core.ItemReadListener;
import org.springframework.batch.core.SkipListener;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.skip.SkipLimitExceededException;
import org.springframework.batch.core.step.skip.SkipPolicy;
import org.springframework.batch.item.ExecutionContext;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 跳过异常记录
 * 这里逻辑是当Spring Batch 在读取数据时，根据各种意外情况抛出不同异常，
 *      ItemReader 可以按照约定跳过指定的异常，同时也可以限制跳过次数。
 * 如果出错直接跳过去，这操作有点自欺欺人，并不是优雅的解决方案。开发可选下面这种。
 *
 * 异常记录记日志
 * 所谓记录日志，就是当ItemReader 读取数据抛出异常时，将具体数据信息记录下来，方便后续人工接入。
 * 具体实现使用ItemReader监听器。
 *
 * 放弃处理
 * 这种异常在处理不是很重要数据时候使用。
 */
public class A5_读取异常的判断 {
    public static void main(String[] args) {

    }
}
class MySkipListener<T,S> implements SkipListener<T,S>{

    @Override
    public void onSkipInRead(Throwable throwable) {
        OutColour.out.printlnGreen("SkipListener读：", throwable.getMessage());

    }

    @Override
    public void onSkipInProcess(T t, Throwable throwable) {
        OutColour.out.printlnGreen("SkipListener操作：", throwable.getMessage());

    }

    @Override
    public void onSkipInWrite(S s, Throwable throwable) {
        OutColour.out.printlnGreen("SkipListener读异常的处理：", throwable.getMessage());

    }

}
@Component//块读监听的判断 只能监听原生的，自定义的 是西安了 ItemReader 接口的，程序自带的其他读不可使用
class MyItemReadListener<T> implements ItemReadListener<T> {

    @Override
    public void beforeRead() {
        OutColour.out.printlnGreen("beforeRead");
    }

    @Override
    public void afterRead(T o) {
        OutColour.out.printlnGreen("afterRead");
    }

    @Override
    public void onReadError(Exception e) {

        OutColour.out.printlnGreen("读异常的处理：", e.getMessage());
    }
}
